import altair as alt
import pandas as pd
import geopandas as gpd
df = pd.read_csv('population_trends.csv')
df = df[df.region != 'Ukraine']
df.head()
| region | year | rate | |
|---|---|---|---|
| 31 | Crimea | 1989 | 3.9 |
| 32 | Crimea | 1990 | 2.5 |
| 33 | Crimea | 1991 | 0.9 |
| 34 | Crimea | 1992 | -0.7 |
| 35 | Crimea | 1993 | -2.7 |
ua = gpd.read_file('ukraine.json')
last_year = df["year"].max()
last_year
2019
cur_df = df[df["year"] == last_year]
карта, котра відображає рівень приросту / скорочення населення за регіонами станом на останній доступний рік
При наведенні на якийсь регіон на карті він має виділятися на графіку за допомогою товщини лінії та її кольору.
select_region = alt.selection_single(on = 'mouseover', nearest = False, empty = 'none')
base = alt.Chart(ua).transform_lookup(
lookup = 'NAME_1',
from_ = alt.LookupData(data = cur_df,
key = 'region',
fields=['region', 'rate'])
).mark_geoshape(stroke='black', strokeWidth=1).encode(
color = alt.Color('rate:O'),
tooltip = [alt.Tooltip('rate:O'),
alt.Tooltip('region:N')]
)
stroked = alt.Chart(ua).transform_lookup(
lookup = 'NAME_1',
from_ = alt.LookupData(data = cur_df,
key = 'region',
fields=['region', 'rate'])
).mark_geoshape(stroke='red', strokeWidth=2).encode(
color = alt.Color('rate:O'),
opacity = alt.condition(select_region, alt.value(1), alt.value(0))
).add_selection(
select_region
)
alt.layer(base, stroked).properties(width = 900, height = 500, background = '#F9F9F9', padding = 25)
лінійний графік, котрий відображає рівень приросту / скорочення населення за регіонами за всіма роками (одна лінія на графіку - один регіон)
При наведенні на якусь лінію на графіку відповідний їй регіон має виділятися на карті за допомогою прозорості.
alt.data_transformers.disable_max_rows()
DataTransformerRegistry.enable('default')
select_region = alt.selection_single(on = 'mouseover', nearest = False, fields = ['region'], empty = 'all')
line_chart = alt.Chart(df).mark_line().encode(
x = alt.X('year:Q'),
y = alt.Y('rate:Q'),
tooltip = [alt.Tooltip('rate:O'),
alt.Tooltip('region:N')],
detail = alt.Detail('region:N'),
opacity = alt.condition(
select_region,
alt.value(1),
alt.value(0.3)
)
)
ua_map = alt.Chart(ua).transform_lookup(
lookup = 'NAME_1',
from_ = alt.LookupData(data = cur_df,
key = 'region',
fields=['region', 'rate'])
).mark_geoshape(stroke='black', strokeWidth=1).encode(
color = alt.Color('rate:O'),
tooltip = [alt.Tooltip('rate:O'),
alt.Tooltip('region:N')],
opacity = alt.condition(
select_region,
alt.value(1),
alt.value(0.3)
)
)
line_chart.properties(width = 800, height = 400).add_selection(select_region) & ua_map.properties(width = 800, height = 300).add_selection(select_region)